
const { exec } = require('child_process');

/**
 * 发送钉钉消息
 * @param  {Object} data  响应数据
 * @return
 */
function sendMsg(data, cfg, type, title) {
  // 获取文案
  let text = ''
  if (type === 'commit') {
    text = getArgsCommit(data, title);
  }

  if (type === 'pr') {
    text = getArgsPR(data, title);
  }

  // 推送钉钉消息
  sendTalkMessage(text, cfg);


  function sendTalkMessage(text, cfg) {
    console.log(text);

    const token = cfg.ddToken;
    const url = 'https://oapi.dingtalk.com/robot/send?access_token=';
    console.log(`curl ${url}${token} -H 'Content-Type: application/json' -X POST -d '${text}'`)

    return exec(`curl ${url}${token} -H 'Content-Type: application/json' -X POST -d '${text}'`);
  }


  function getArgsCommit(data, title) {
    const resultData = {
      msgtype: 'markdown',
      markdown: {
        title: title,
        // 模板字符串页支持换行，但是不支持友好的缩进，所以的通过+连接字符串
        text: `**${title}**\n\n`  +
          `> 提交信息: ***<font color=\"#ff0000\">${data.head_commit.message}</font>***\n\n` +
          `> 提交人员: **<font color=\"#00CD00\">${data.pusher.name}</font>**\n\n` +
          `> 项目地址: **[${data.project.name}](${data.project.clone_url})**\n\n` +
          `> 当前分支: **${data.ref}**\n\n` +
          `> 提交时间: ${data.project.pushed_at}\n`
      }
    }

    return JSON.stringify(resultData);
  }

  function getArgsPR(data, title) {
    const resultData = {
      msgtype: 'markdown',
      markdown: {
        title: title,
        // 模板字符串页支持换行，但是不支持友好的缩进，所以的通过+连接字符串
        text: `**项目阶段性PR提交**\n\n`  +
          `> 提交信息: ***<font color=\"#ff0000\">${data.pull_request.title}</font>***\n\n` +
          `> 提交人员: **<font color=\"#00CD00\">${data.pull_request.user.name}</font>**\n\n` +
          `> 合并人员: **<font color=\"#00CD00\">${data.pull_request.base.user.name}</font>**\n\n` +
          `> 功能列表: <font color=\"#00CD00\">${data.pull_request.body}</font>\n\n` +
          `> 项目地址: **[${data.project.name}](${data.project.clone_url})**\n\n` +
          `> 合并方向: **${data.source_branch} ---> ${data.target_branch}**\n\n` +
          `> 操作类型: **${title}**\n\n` +
          `> 提交时间: ${data.project.pushed_at}\n`
      }
    }

    return JSON.stringify(resultData);
  }
}

module.exports = {
  sendMsg
};
